package com.deluxelx.soul.inn.service.article;

import com.baomidou.mybatisplus.extension.service.IService;
import com.deluxelx.soul.inn.bean.article.Article;
import com.deluxelx.soul.inn.bean.article.ArticleDTO;
import com.deluxelx.soul.inn.bean.article.ArticleDetailVO;
import com.deluxelx.soul.inn.bean.article.ArticleVO;
import com.deluxelx.soul.inn.common.param.CollectedParam;

import java.util.List;

/**
 * 文章服务接口类
 *
 * @author: zihao.liao
 * @date: 2024/2/6 19:11
 */
public interface ArticleService extends IService<Article> {
    /**
     * 获取文章列表
     * @return 文章列表
     */
    List<ArticleVO> fetchIndexArticleList();
    /**
     * 查询用户收藏的文章
     * @param userId 用户id
     * @return 文章列表
     **/
    List<ArticleVO> fetchMyFollowArticle(String userId);
    /**
     * 获取搜索的文章列表
     * @param keyword 关键字
     * @return 文章列表
     */
    List<ArticleVO> fetchSearchArticleList(String keyword);
    /**
     * 根绝导航栏分类获取文章列表
     *
     * @param typeId 分类id
     * @param limit 限制条数（下拉）
     * @return List<ArticleVO>
     **/
    List<ArticleVO> fetchArticleListByCondition(String typeId, Integer limit);
    /**
     * 获取咨询师写的文章列表
     *
     * @param counselorId 咨询师id
     * @return 文章列表
     */
    List<ArticleVO> fetchArticleListByCounselor(String counselorId);
    /**
     * 获取文章详情
     *
     * @param articleId 文章id
     * @return 文章详情
     */
    ArticleDetailVO fetchArticleDetail(String articleId);
    /**
     * 查看该用户是否收藏此文章
     *
     * @param param 文章id
     * @return 结果
     */
    Boolean isCollectArticle(CollectedParam param);
    /**
     * 该用户点击关注文章
     * @param param 前端传参
     * @return 结果
     */
    Boolean followArticle(CollectedParam param);
    /**
     * 该用户点击取消关注文章
     * @param param 前端传参
     * @return 结果
     */
    Boolean unFollowArticle(CollectedParam param);
    /**
     * 保存文章
     * @param param 文章参数
     * @return 主键id
     */
    String saveArticle(ArticleDTO param);
    /**
     * 修改文章
     * @param param 文章参数
     * @return 结果
     */
    Boolean modifyArticle(ArticleDTO param);
    /**
     * 删除文章
     *
     * @param articleId 文章id
     * @return 结果
     **/
    Boolean removeArticle(String articleId);
}
